<?php
define('MAPS_HOST', 'maps.google.com.br');

// key google maps para localhost
define('KEY', 'ABQIAAAAnIZeAAUQnPBFgItkUMq0rBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSSCsosKoeUyguFQSdwmdM2kG6utQ');

function achaLatLng($endereco) {

    $delay = 0;

    $base_url = 'http://' . MAPS_HOST . '/maps/geo?output=xml&key=' . KEY;

    $geocode_pending = true;

    $result = array();

    while ($geocode_pending) {
        $request_url = $base_url . '&q=' . urlencode($endereco);
        $xml = simplexml_load_file($request_url) or print_debug('GMAPS url not loading',1);
        $status = $xml->Response->Status->code;

        if (strcmp($status, '200') == 0) {

            // Successful geocode
            $geocode_pending = false;
            $coordinates = $xml->Response->Placemark->Point->coordinates;
            $coordinatesSplit = explode(',', $coordinates);

            // Format: Longitude, Latitude, Altitude
            $lat = $coordinatesSplit[1];
            $lng = $coordinatesSplit[0];

            // CUIDADO: às vezes o endereço encontrado pelo gmaps
            // é diferente daquele informado na oferta, o que acarreta
            // sua alteração
            // para ficar com o do gMaps descomentar
            //$endereco = (string)$xml->Response->Placemark->address;
            //$endereco = utf8_decode($endereco);
            return array($endereco, $lat, $lng);

        } else if (strcmp($status, '620') == 0) {
            // 620 = esperar um pouco mais
            $delay += 100000;
        } else {
            // failure to geocode
            $geocode_pending = false;
            echo('Address ' . $endereco . ' failed to geocoded. ');
            echo('Received status ' . $status);
            return array($endereco, 'NULL', 'NULL');
        }
        usleep($delay);
    }

}
?>
